#***********************************************************
#
# @className  WaterprintRSF
#
# @fileName   waterprintClass.rb
#
# @author     Leoš Klik, klikleos@fel.cvut.cz
#
# @desc       Trida prida na pozadi pdf souboru vodotisk
#             s uzivatelskym jmenem, serverem ze ktereho
#             byl soubor stazen, datem stazeni a nastavi
#             zadane opravneni pro pdf
#
# @constructor
#             username - bude uvedeno na pozadi
#             hostname - server ze ktereho bylo stazeno
#             opravneni - omezeni prace se souborem pdf (1)
#             velikostPapiru - A4 / A5 / B4 ....
#             soubor - vstupni soubor napr. skripta.pdf
#
# @require    gem PDF Writer (gem install pdf-writer)
#             gem iconv (gem install iconv)
#             pdf Toolkit (nainstalovat balik pdftk)
#
# (1)   00 - zakazat vsechyn operace s pdf
#       01 - povolit pouze tisk
#       10 - povolit pouze kopirovani
#       11 - povolit tisk i kopirovani
#
#***********************************************************

class WaterprintPDF

#---------------------------------
#  DEFINICE KONSTANT
#   v pripade potreby zmenit zde
#---------------------------------
@@UHEL = 45
@@VELIKOSTPISMAU = 80
@@BARVAPISMA = "c0c0c0"
@@FONT = "Helvetica"


  def initialize(username, hostname, opravneni, velikostPapiru, soubor)
    @username = username
    @hostname = hostname
    @opravneni = opravneni
    @velikostPapiru = velikostPapiru
    @soubor = soubor
  end

  private  
    def generujHeslo(length=8)
      chars = 'abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789'
      password = ''
      length.times { password << chars[rand(chars.size)] }
      password
    end

  public 
    def getPdf
      pdf = PDF::Writer.new :paper => @velikostPapiru, :orientation => :portrait
      pdf.select_font(@@FONT)
      
      #------------------------------------------------------------------------------------------------
      #   VYPOCET A UMISTENI SIKMEHO VODOTISKU NA STRED STRANKY
      #------------------------------------------------------------------------------------------------
      _delkaTextu = pdf.text_line_width(@username, @@VELIKOSTPISMAU)
      _vyskaTextu = pdf.font_height(@@VELIKOSTPISMAU)
      _textXpozice = (pdf.page_width/2) - (_delkaTextu/2)
      _textYpozice = (pdf.page_height/2) - (_vyskaTextu/2)
      
      #---posun stredu po rotaci
      _uhloprickaPul = Math.sqrt(_delkaTextu * _delkaTextu + _vyskaTextu * _vyskaTextu) / 2

      _vertikalniPosun = Math.sin(@@UHEL) * _uhloprickaPul - (_vyskaTextu / 2)
      _finalYpozice = _textYpozice - _vertikalniPosun

      _horizontalniPosun = (_delkaTextu / 2) - Math.cos(@@UHEL) * _uhloprickaPul
      _finalXpozice = _textXpozice + _horizontalniPosun

      pdf.fill_color Color::RGB.from_html(@@BARVAPISMA)
      pdf.add_text(_finalXpozice, _finalYpozice, @username, @@VELIKOSTPISMAU, @@UHEL)
      
      #------------------------------------------------------------------------------------------------
      #   UMISTENI VODOTISKU DO HLAVICKY A PATICKY STRANKY
      #------------------------------------------------------------------------------------------------    
      datum = Time.new
      datumFormatted = datum.strftime("%d.%m.%Y %H:%M:%S")

      hfText = "Staženo uživatelm #{@username} z #{@hostname}, " + datumFormatted
      
      # prevod kvuli diakritice
      str_conv = Iconv.new('windows-1252', 'utf-8')
      hfText = str_conv.iconv(hfText)

      pdf.add_text_wrap(0, 10, pdf.page_width, hfText, 10, :center)
      pdf.add_text_wrap(0, pdf.page_height - pdf.font_height(11) - 10, pdf.page_width, hfText, 11, :center)

      for i in (1..4)
        @soubor.chop!
      end

      #--ulozi pdfko s vodotiskem
      pdf.save_as("tmp_#{@username}_#{@soubor}.pdf")
      
      #--generator nahodneho hesla owner_pw
      @pdfHeslo = generujHeslo
      
      #--nastaveni opravneni pdf
      case @opravneni
        when 00 #vse zakazano
          @setPerm = ""
        when 01 #pouze tisk
          @setPerm = "allow printing"
        when 10 #pouze kopirovani
          @setPerm = "allow copycontents"
        when 11 #tisk a kopirovani
          @setPerm = "allow printing copycontents"
      end
      
      system("pdftk #{@soubor}.pdf background tmp_#{@username}_#{@soubor}.pdf output #{@soubor}_#{@username}.pdf owner_pw #{@pdfHeslo} #{@setPerm}")
      
      system("rm -rf tmp_#{@username}_#{@soubor}.pdf")

    end
end
  
